package com.innjia.sys.dao;

import com.innjia.base.dao.BaseDao;
import com.innjia.base.utils.PageUtils;
import com.innjia.sys.entity.HouseEntity;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 房源信息模型
 * 
 * @author innjia
 * @email huangxianyuan@gmail.com
 * @date 2017-11-13 19:07:07
 */
@Repository
public interface HouseDao extends BaseDao<HouseEntity> {

    HouseEntity houseInfo(String id);
    
    /**
	 * 获取最新的房源信息
	 * @return
	 */
	HouseEntity getLatestHouse();

	/*
	 * 根据序列号获取房源
	 */
	HouseEntity findHouseBySerialNum(String serialNum);
	
	/**
	 * 条件查询总数：合租的房源，子房源不算数目，挂载到父房源下
	 * @param houseApplyEntity
	 */
	Integer totalByBean(@Param("entity") HouseEntity entity);

	/**
	 * 条件分页查询list
	 * @param houseApplyEntity
	 * @param pageUtils
	 * @return
	 */
	List<HouseEntity> queryListByBeanPage(@Param("entity")HouseEntity entity, @Param("pageUtils")PageUtils pageUtils);

	/**
	 * 查询父房资的子房源
	 * @param params
	 * @return
	 */
	List<HouseEntity> queryChildrenByParentId(String parentId);

	/**
	 * 根据房源的id查询房源的详情信息
	 * @param houseId
	 * @return
	 */
	List<HouseEntity> queryDetailById(String id);

	/**
	 * 修改房源的出租状态
	 * @param entity
	 */
	void updateRentStatus(HouseEntity entity);
	
	/**
	 * 条件查询给App使用的总数:合租的房源，子房源单独算，父房源不算数目
	 * @param houseEntity
	 * @return
	 */
	int AppTotalByBean(@Param("entity") HouseEntity entity);

	/**
	 * 条件分页查询App需要的房源列表,合租的房源，子房源加入到列表，父房源不加入
	 * 既：只罗列可以直接签租的房源
	 * @param houseEntity
	 * @param pageUtils
	 * @return
	 */
	List<HouseEntity> queryAppListByBeanPage(@Param("entity")HouseEntity entity, @Param("pageUtils")PageUtils pageUtils);

	/**
	 * 根据房东的id，分页查询房东名下的所有房源
	 * @param landlordId
	 * @param pageUtils 
	 * @return
	 */
	List<HouseEntity> queryListByLandlordId(@Param("landlordId")String landlordId, @Param("pageUtils")PageUtils pageUtils);
	
	/**
	 * 查询给房东名下父房源的总数
	 * @param landlordId
	 * @return
	 */
	int AppTotalByLandlordId(String landlordId);

	/*
	 * 根据房间联合索引查询是否有存在的房源
	 * 联合索引： (`city_name`,`district_name`,`address`,`vilage`,`block_no`,`unit_no`,`room_no`,`floor_no`,`door`)
	 */
	HouseEntity findByUniqueKey(HouseEntity entity);

	/*
	 * 房源禁用 - 启用, 房源只能软删除
	 */
	int updateStatus(HouseEntity houseEntity);
}
